libbpf: fix readelf output parsing on powerpc with recent binutils
authorAurelien Jarno <aurelien@aurel32.net>
Sun, 1 Dec 2019 19:35:55 +0000 (20:35 +0100)
committerSalvatore Bonaccorso <carnil@debian.org>
Sun, 5 Jan 2020 14:40:37 +0000 (14:40 +0000)
On powerpc with recent versions of binutils, readelf outputs an extra
field when dumping the symbols of an object file. For example:

    35: 0000000000000838    96 FUNC    LOCAL  DEFAULT [<localentry>: 8]     1 btf_is_struct

The extra "[<localentry>: 8]" prevents the GLOBAL_SYM_COUNT variable to
be computed correctly and causes the checkabi target to fail.

Fix that by looking for the symbol name in the last field instead of the
8th one. This way it should also cope with future extra fields.

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Gbp-Pq: Topic bugfix/ppc64el
Gbp-Pq: Name libbpf-fix-readelf-output-parsing-on-powerpc-with-re.patch

tools/lib/bpf/Makefile

index 56ce6292071b1d3575c26aafaea7967004d5a4cc..a7d7d35885c71085cb0fb1f6a0a058442171bc70 100644 (file)
@@ -145,7 +145,7 @@ PC_FILE             := $(addprefix $(OUTPUT),$(PC_FILE))
 
 GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN_SHARED) | \
                           cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \
-                          awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$8}' | \
+                          awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}' | \
                           sort -u | wc -l)
 VERSIONED_SYM_COUNT = $(shell readelf -s --wide $(OUTPUT)libbpf.so | \
                              grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | sort -u | wc -l)
@@ -217,7 +217,7 @@ check_abi: $(OUTPUT)libbpf.so
                     "versioned in $(VERSION_SCRIPT)." >&2;              \
                readelf -s --wide $(OUTPUT)libbpf-in.o |                 \
                    cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' |   \
-                   awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$8}'|   \
+                   awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}'|  \
                    sort -u > $(OUTPUT)libbpf_global_syms.tmp;           \
                readelf -s --wide $(OUTPUT)libbpf.so |                   \
                    grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 |             \